Source code for src.admrec_rules

from itertools import izip

from errors import *
from util import *

[docs]class AdmrecRules(object): """Class to handle coding of administration records (nonarr and noncrt).""" def __init__(self, log, segment, rulesets, rule_order): """ @param log: Log object to use for log output. @param segment: The name of the current segment being processed (arrest or sentence). @param rulesets: A dictionary containing all the nonarr/noncrt state rulesets. @param rule_order: A dictionary (key is state abbr) of lists which contain the names of rulesets sorted in the order of rule priority """ self.unknown = 2 if segment == 'arrest' else 3 self.log = log self.segment = segment self.rulesets = rulesets self.rule_order = rule_order
[docs] def convert_admrec(self, row, _index=0): """A global rule controller to convert the nonarr and noncrt variables. @param row: The current row to be converted @param _index: A variable to keep track of the recursive depth """ state_key = get_state_key(row['%sstate' % self.segment[0]]) if row['%schg' % self.segment[0]] == 998: return 1 #get the current ruleset if state_key in self.rule_order: ruleset = self.rulesets[self.rule_order[state_key][_index]] #get the key key = '|'.join(ruleset.metadata.get_key(row)) #increment index index = _index + 1 if key_as_str(row['rapstatex']) == 'wvfbi': key = key.replace('0', 'o') try: #code noncrt or nonarr using key in ruleset return ruleset.convert(key) except ConvertError: #check to see if we need to recurse if index != len(self.rule_order[state_key]): #dive down one layer return self.convert_admrec(row, index) else: return self.unknown #no rule for state else: return self.unknown